# coding=utf-8
from phosphorusScripts.bedcore.client import clientApi
from phosphorusScripts.client.data import manager
from phosphorusScripts.common.configBuilder import ConfigBuilder


class ConfigComponent(clientApi.GetComponentCls()):

    def __init__(self, customId):
        super(ConfigComponent, self).__init__(customId)

    def GetConfigBuilder(self):
        """
        获取配置构建器类。请使用该类的实例来构建配置。
        :rtype: type[ConfigBuilder]
        :return: 配置构建器
        """
        return ConfigBuilder

    def RegisterConfig(self, namespace, builtDict):
        """
        注册配置。
        :param str namespace: 配置的命名空间，此值需要唯一
        :param dict builtDict: 配置信息，此值需要由配置构建器生成
        :rtype: bool
        :return: 是否注册成功
        """
        return manager.register(namespace, builtDict)

    def SyncOptionValue(self, namespace, key, value):
        """
        同步选项值。
        :param str namespace: 选项所属配置的命名空间
        :param str key: 选项键名
        :param bool|str|int|float value: 值
        :rtype: bool
        :return: 是否同步成功
        """
        if not manager.isModifiableOption(namespace, key):
            return False
        return manager.setModifiableOptionCurrent(namespace, key, value)

    def GetOptionValue(self, namespace, key):
        """
        获取选项值。
        :param str namespace: 选项所属配置的命名空间
        :param str key: 选项键名
        :rtype: bool|str|int|float|None
        :return: 值，获取失败时返回None
        """
        if not manager.isModifiableOption(namespace, key):
            return None
        return manager.getModifiableOptionCurrent(namespace, key)
